const fs = require('fs')
const writeStream = fs.createWriteStream('./test.txt')

// 向可写流中写入数据一百万次。
// 留意背压（back-pressure）。
function writeOneMillionTimes (writer, data, encoding, callback) {
  let i = 1000000
  write()
  function write () {
    let ok = true
    do {
      i--
      if (i === 0) {
        // 最后一次写入。
        writer.write(data, encoding, callback)
      } else {
        // 检查是否可以继续写入。
        // 不要传入回调，因为写入还没有结束。
        ok = writer.write(data, encoding)
      }
    } while (i > 0 && ok)
    if (i > 0) {
      // 被提前中止。
      // 当触发 'drain' 事件时继续写入。
      writer.once('drain', write)
    }
  }
}

writeOneMillionTimes(writeStream, '1.', 'utf8', () => { console.log('写完了！') })
